package com.fxd.ui;

import com.fxd.dao.IAccountDao;
import com.fxd.service.IAccountService;
import com.fxd.service.impl.AccountServiceImpl;
import com.fxd.service.impl.AccountServiceImpldep;
import javafx.application.Application;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import java.util.Arrays;

/**
 * @auther fuxudong
 * @date 2021/1/12 - 16:52
 * 获取spring的IOC容器，并根据ID获取对象
 * <p>
 * applicationContext的三个常用实现类
 * ClassPathXmlApplicationContext：(与FileSystemXmlApplicationContext比较，更常用)
 * 它可以加载类路径下的配置文件，要求必须在类路径下，不在的话，加载不了。
 * FileSystemXmlApplicationContext：
 * 它可以加载磁盘任意路径下的配置文件（必须有访问权限）
 * AnnotationConfigApplicationContext：
 * 它是用于读取注解创建容器的
 * <p>
 * 核心容器的两个接口：
 * applicationcontext：创建单例对象时
 * 它在构造核心容器时，创建对象采取的策略是立即加载的方式，也就是说，
 * 只要一读取完配置文件马上就会创建配置文件配置的对象。
 * beanfactory：创建多例对象使用
 * 它在构建核心容器时，创建对象采取的策略是采用延迟加载的方式，也就是说，
 * 什么时候根据id获取对象了，什么时候才真正的创建对象。
 */
public class Client {
    public static void main(String[] args) {
        //获取核心容器对象
        // ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        //根据id欧bean对象
        IAccountService as = (IAccountService) ac.getBean("accountService");
        as.saveAccount();

        //手动关闭容器
        ac.close();

    }
    @Test
    public void testcon(){
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean2.xml");
        //根据id欧bean对象
        IAccountService as = (IAccountService) ac.getBean("accsdep");
        System.out.println(as);
    }
    @Test
    public void testset(){
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean2.xml");
        //根据id欧bean对象
        IAccountService as = (IAccountService) ac.getBean("accset");
        System.out.println(as);
    }
    @Test
    public void testarr(){
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean2.xml");
        //根据id欧bean对象
        IAccountService as = (IAccountService) ac.getBean("accd");
        System.out.println(as);
    }
}
